/*Sample code to read in test cases:*/
#include "stdafx.h"

#include <iostream>
#include <fstream>
#include <string>
//#include <stdlib.h>
#include "sum_handler.h"

using namespace std;
//class handler
//{
//public:
//	virtual ~handler()
//	{
//
//	}
//	virtual void handle_word(string& word) = 0;
//	virtual void display_line(){};
//	virtual void display_all(){};
//};

class buf_hnd
{
public:
	buf_hnd(handler& hnd_)
		:hnd(hnd_)
		,espa(" ")
		,tspa("\t")
	{

	}
	void parse(string& buf)
	{
		size_t last_pos = 0;
		split(buf, espa, last_pos);
	}
	void split(string& str, const string& spa, size_t& last_pos)
	{
		const size_t& pos = str.find_first_of(spa, last_pos);
		string& sub =  str.substr(last_pos, pos - last_pos);
		if (!sub.empty())
		{
			if (string::npos == sub.find(tspa, 0))
			{
				hnd.handle_word(sub);
			} else//split "\t"
			{
				size_t tlp = 0;
				split(sub, tspa, tlp);
			}
			
		}
		if (string::npos == pos)
		{
			return;
		}
		last_pos = pos + 1;
		split(str, spa, last_pos);
	}

private:
	handler& hnd;
	const string espa;
	const string tspa;
};


//int main()
//{
//	sum_handler hnd;
//	buf_hnd bhnd = buf_hnd(hnd);
//	fstream file;
//	char sysInputFile[] = "1.txt";
//	file.open(sysInputFile);
//	string lineBuffer;
//	while (!file.eof())
//	{
//		getline(file, lineBuffer);
//		if (lineBuffer.length() == 0)
//			continue; //ignore all empty lines
//		else 
//		{
//			//do something here
//			bhnd.parse(lineBuffer);
//			hnd.display_line();
//		}
//	}
//	hnd.display_all();
//	return 0;
//}